// /uniCloud-alipay/cloudfunctions/common/iss-api-response/index.js

// 响应状态码枚举
const ResponseCode = {
  SUCCESS: 0,        // 成功
  BAD_REQUEST: 400,    // 客户端错误
  UNAUTHORIZED: 401,   // 未授权
  FORBIDDEN: 403,      // 禁止访问
  NOT_FOUND: 404,      // 资源不存在
  SERVER_ERROR: 500   // 服务器错误
};

// 错误消息常量
const ErrorMessage = {
  // 通用错误
  NOT_LOGIN: '未登录或token过期',
  ID_REQUIRED: 'ID不能为空',
  INVALID_ID: 'ID为空或格式不正确',
  IDS_REQUIRED: '请提供需要删除的ID数组',
  PARAM_INCOMPLETE: '参数不完整',
  UPDATE_TIME_ERROR: '更新时间参数错误',
  DATABASE_ERROR: '数据库操作失败',
  SERVICE_ERROR:'服务错误',
  PAGENATION_PARAMS_ERROR:'页码和每页数量不能为空',
  DOWNLOAD_FILE_ERROR: '文件下载失败',
  
  // 壁纸分类相关
  CLASSIFY_NOT_FOUND: '壁纸分类不存在',
  CLASSIFY_NAME_REQUIRED: '壁纸分类名称不能为空',
  GET_CLASSIFYLIST_ERROR: '获取壁纸分类列表错误',
  // 壁纸轮播图相关
  GET_SWIPERLIST_ERROR: '获取轮播图列表错误',
  // 公告相关
  NOTICE_NOT_FOUND: '对应公告不存在',
  GET_NOTICELIST_ERROR: '获取公告列表错误',
  GET_NOTICE_BY_ID_ERROR: '根据ID获取公告信息错误',
  // 壁纸相关
  IMAGE_NOT_FOUND: '对应壁纸不存在',
  GET_IMAGELIST_ERROR: '获取壁纸列表错误',
  GET_IMAGE_BY_ID_ERROR: '根据ID获取壁纸信息错误',
  TOGGLE_FAVORITE_ERROR: '切换壁纸收藏状态失败',
  RATE_WALLPAPER_ERROR: '评分失败',
  INVALID_SCORE: '评分必须是0-5之间的一位小数',
  GET_IMAGE_DETAIL_ERROR: '获取壁纸详情失败'
};

/**
 * 统一响应格式类
 */
class ApiResponse {
  constructor(errCode, msg, data = null) {
    this.errCode = errCode
    this.errMsg = msg
    this.data = data
  }

  static success(data = null, msg = '操作成功') {
    return new ApiResponse(ResponseCode.SUCCESS, msg, data)
  }
  
  static unauthorized(data = null, msg = '请先登录') {
	  return new ApiResponse(ResponseCode.UNAUTHORIZED, msg, data)
  }


  static badRequest(msg = '请求参数错误') {
    return new ApiResponse(ResponseCode.BAD_REQUEST, msg)
  }

  static notFound(msg = '资源不存在') {
    return new ApiResponse(ResponseCode.NOT_FOUND, msg)
  }

  static serverError(msg = '服务器内部错误') {
    return new ApiResponse(ResponseCode.SERVER_ERROR, msg)
  }

  static custom(errCode, msg, data = null) {
    return new ApiResponse(errCode, msg, data)
  }
}

// 挂载枚举到类上
ApiResponse.ResponseCode = ResponseCode;
ApiResponse.ErrorMessage = ErrorMessage;

module.exports = ApiResponse;